#ifndef SPLAY_H
#define SPLAY_H

#include "Arbol.h"

class Splay : public Arbol<Registro>
{
    public:
        Splay();

        void Insertar(int clave, int lic, std::string modelo);
        //void Splay2(int clave);
        NodoArbol<Registro>* Buscar(int clave);
        //NodoArbol<Registro> Buscar();
        ///NodoArbol<Registro>* BuscarS(int clave);



    private:

        void Insertar(int clave, Registro c, NodoArbol<Registro>** raiz);

        NodoArbol<Registro>* Buscar(int clave,NodoArbol<Registro>** raiz);

        /*
        NodoArbol<Registro>* splay_A(int clave, NodoArbol<Registro>*raiz);   //implementación de árbol splay de arriba hacia abajo
        NodoArbol<Registro>* Insertar(int clave, int placa, std::string modelo, NodoArbol<Registro>*k2);

        inline NodoArbol<Registro>* RR_Rotate(NodoArbol<Registro>* k2);  //rotacion derecha
        inline NodoArbol<Registro>* LL_Rotate(NodoArbol<Registro>* k2);  //rotacion izquierda




        Declaraciones originales
splay* New_Node(KEY_TYPE key); //Declaracion de la funcion que crea el nuevo nodo
inline splay* RR_Rotate(splay* k2); //Declaración de la funcion que realiza la rotacion derecha
inline splay* LL_Rotate(splay* k2); //Declaración de la funcion que realiza la rotacion izquierda
splay* Splay(int key, splay* root); //Declaración de la implementación de árbol splay de arriba hacia abajo
splay* Insert(KEY_TYPE key, splay* root); //Declaración de la función insertar
splay* Delete(KEY_TYPE key, splay* root); //Declaración de la función borrar
splay* Search(KEY_TYPE key, splay* root); //Declaración de la función buscar, utilozada interbamente en nunas unciones
void InOrder(splay* root); //Declaración de la función que muestra en formato InOrden los elementos del arbol.

        */


};

#endif // SPLAY_H
